"""
1.其他数据类型当成布尔值处理的原则是什么(2分)？
空容器和字符串,None,整型0, 浮点数0 当做0(False)处理,其他当做1(True)处理

2.写出if语句的完整语法（3分）？
if 条件表达式1:
    满足条件表达式1执行的代码块.
elif 条件表达式2:
    满足条件表达式2执行的代码块.
elif 条件表达式3:
    满足条件表达式3执行的代码块.
...
else:
    以上条件都不满足,执行这里的代码块.

3.写出for的完整语法结构（2分）？for循环适用于哪些数据类型（1分）？以及描述for循环语法的执行过程（2分）？
语法:
for 变量 in 序列:
    循环体
    获取变量

for循环适合可迭代的数据类型对象, list, str, tuple等
每一次遍历(循环),会依次提取出可迭代对象中的元素,赋值给临时变量.直到所有元素遍历完.

4.为什么要使用拆包（1分）？请写出代码简述什么是拆包（4分）？
 将序列中的元素依次赋值给变量,方便调用
list1 = [1, 2, 3]
a, b, c = list1
print(a, b, c)

5.函数的定义以及调用的语法（定义2分 调用1分）？
def fn(a, b):
    return a + b
print(fn(1, 2))

6.python的概念是什么？（2分）
python是一款易于学习且功能强大的编程语言，它具有高效率的数据结构，能够简单又有效地实现面象对象编程。

7.写出如何获取字典中指定的键对应的值（4分 一个2分）
print(dict.[key])       print(dict.get(key))

8.有一个列表li=[0,1,2,3,4,5,6,7,8,9,10] 如何通过切片得到 [9,7,5,3]？（2分）
li=[0,1,2,3,4,5,6,7,8,9,10]
li1 = li[-2:-9:-2]
print(li1)

9.面向对象的三大特征是什么（3分）
封装,继承,多态

10.请尽可能的详细的描述你对于python面向对象的掌握情况(前两天的知识)，包括概念和语法(写详细,可以以案例的方式)。（40分）
# TODO 类和对象
# 类的定义
class Chinese:
    # 类属性
    country = '中国'

    # 类方法
    @classmethod
    def skills(cls, skill):  # 中国人都会讲中文
        cls.skill = skill
        print(f'我们来自{cls.country},都会{cls.skill}')

    # 静态方法
    @staticmethod
    def skin():
        print('都是黄皮肤')

    # 对象属性
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # 对象方法
    def introduce(self):
        print(f'我的名字叫{self.name}, 我今年{self.age}岁')


# 对象创建
p1 = Chinese('朱梓鑫', 18)
# 静态方法调用
Chinese.skin()  # 类调用
Chinese('yang yu', 18).skin()  # 对象调用
# 类属性调用
print(Chinese.country)  # 类调用
print(p1.country)  # 对象调用
# 类方法调用
Chinese.skills('讲中文')  # 类调用
p1.skills('讲中文')  # 对象调用
# 对象属性
print(p1.name)
# 对象方法
p1.introduce()


# TODO 单例模式
class Singleton:
    __instance = None

    @classmethod
    def __new__(cls, *args, **kwargs):
        if not __instance:
            cls.__instance = super().__new__(cls, *args, **kwargs)
        return cls.__instance

s1 = Singleton()
print(s1)


# TODO 封装
# 将相同特点的属性和方法封装在类中进行调用
# 对外隐藏内部实现细节,对外提供访问

权限控制:
私有成员:私有属性和私有方法,类的内部可以访问,类的外部和派生类均不可访问 __attr
受保护成员:类的内部和派生类可以访问,类的外部不可访问  _attr   python没有规定,约定俗成
公有成员:类的外部内部派生类均可访问


# TODO 继承
class A:
    def __init__(self):
        pass


# 单继承
class B(A):
    pass


# 多继承
class C:
    pass


class D(A, C):
    pass


# 定义商品类
class Goods:
    def __init__(self, name, price):
        self.name = name
        self.price = price


# 定义子类手机类
class Phone(Goods):
    # 子类重写父类属性和方法
    def __init__(self, name, price, size, os):
        super().__init__(name, price)
        self.size = size
        self.os = os


# 子类调用父类属性和方法
p1 = Phone('iphone', 5999, 16, 'ios')
print(p1.name)
print(p1.price)


# TODO 多态
# 定义动物类
class Animal:
    def call(self):
        print('动物叫')


# 定义两个子类
class Dog(Animal):
    def call(self):
        print('狗叫')


class Cat(Animal):
    def call(self):
        print('猫叫')


# 定义接口
def do_call(obj):
    print('上面附加功能')
    obj.call()
    print('下面附加功能')


# 调用统一接口
do_call(Dog())
do_call(Cat())




11.什么是重写？重写后如何调用父类上的方法？（2分）
重写: 子类重写与父类名称相同的属性或方法
重写后用super()调用父类上的方法

12.请写出异常捕获的完整语法（4分）
try:
    可能发生异常的代码
except (异常的类型1, 异常的类型2, ...):
    发生异常执行的代码

13.请写出模块和包的导入方式（6分）
导入模块:
单个指定模块:
import 模块名
多个指定模块:
import 模块名1, 模块名2, 模块名3, ...
导入包:
import 包名.模块
from 包.包.n import 模块1[as 别名], 模块2[as 别名], ...
from 包[.包.n].模块 import 资源1[as 别名], 资源2[as 别名], ...

14.什么是pip，pip的常用的命令有哪些？（4分）
pip指令是python中自带的包管理工具.不需要安装,安装好了python就可以使用了
通过这个指令就可以安装第三方包模块到本地了
pip install 包名  # 安装
pip list    # 查看系统中有哪些包
pip uninstall 包名    # 卸载包
pip install --upgrade 包名    # 升级包
pip install baoming -i 镜像地址     # 指定镜像下载包

15.什么是单例模式（2分）
单例模式
一个类只能创建一个对象
class Singleton:
    __instance = None

    def __new__(cls, *ards, **kwargs):
        if cls.__instance is None:
            cls.__instance = super().__new__(cls, *ards, **kwargs)
        return cls.__instance

s1 = Singleton()
print(s1)

16.使用列表推导式得到1-50之间能被3整除的所有的数字的列表（4分）
list1 = []
for i in range(1,51):
    if i % 3 == 0:
        list1.append(i)
print(list1)

17.什么是魔法方法，常见的魔法方法有哪些，分别的调用时机是什么（4分）
__init__   （构造函数）
对象初始化方法
触发机制:对象创建以后,自动执行这个方法.
作用: 用来初始化对象的属性
__str__
触发机制: 当对象被print打印的时候,触发str方法执行
使用注意: str方法必须返回字符串类型
作用: 默认print打印对象,输出的是对象的地址.通过str方法可以返回自定义的一个字符串
__del__  （析构函数）
触发机制：当对象被销毁以后执行这个方法   del obj， 当脚本执行完毕以后，所有的数据都会自动销毁
作用：在对象被销毁以后可以做一些销毁之

18.(选做)有如下两张表，查询每个学生的平均成绩。要求显示的列有：学生姓名和平均成绩（5分）
"""





